/**
 * js =赋值语句：把右边的数据/变量赋值给左边
 * 基础数据类型是传值：数字，字符串，布尔，null,undefined
 * 复杂数据类型是传地：对象，数组，函数等等
 */
//传值

// 栈内存的数据会进行共享：运行过程是 它会在栈中创建一个变量为num1的引用然后
// 查找栈内是否有1这个数据，如果没有就创建一个1数据进行赋值，当num2进行查找
// 的时候会找到1这个数据直接会指向1这个数据，但当num2=2的时候 同样会去查找有
// 没有2数据，没有会进行创建2，但不会影响num1=1 这个值
var num1=1;
var num2=num1;
num2=2;
console.log('num1',num1);
console.log('num2',num2);

//传址
//复杂数据类型存储在数据堆，然后地址存储在对应的栈
var obj1={
  a:1
}
var obj2=obj1;
obj2.a = 2
console.log('obj1.a',obj1.a);
console.log('obj1.a',obj2.a);
console.log('----------------------------');

//题目
var user={
  name:'小红'
}
//形参刚好叫user,实际是和全局的user没有关系的，形参可以叫任何名字
function changeName(user){
  //方法内部的变量，先在方法内部找寻是否声明
  //找不到声明，再找寻形参
  //没用形参，那就找全局变量是否有声明
  //没有声明那就自动声明一个该全局变量
  user.name='小明'//改变外面user的name
  user={name:'小兰'}//给user赋一个新的地址
  console.log('形参用户名是：',user.name);//小兰
}
//方法执行的时候传参就是一个给形参变量赋值的一个过程
changeName(user)
console.log('用户名是：',user.name);//小明

